﻿
// CWindApp类.cpp: 定义应用程序的类行为。
//

/*
每一个应用程序在关闭的时候 都保存了一些应用信息，比如窗口化visual studio2022 再关闭，下次重新打开的时候 该应用程序还是窗口化，还是在原来关闭之前的位置打开 
	这种情况	称之为配置文件

	了解CWindApp类最核心的就是去了解怎么样去弄配置文件！！！！

		配置文件的逻辑：
			1.关闭对话框的时候	把位置信息	存储到	配置文件中

			2.打开对话框的时候	从配置文件中读取	位置信息		并设置对话框

			默认的配置文件的位置在 C:\\Windows 文件夹下

			注意注释掉：
				C*App类的InitInstance函数中SetRegistryKey函数
			然后管理员身份运行


	注册表：
	    1.如果调用了SetRegistryKey函数		
			就会在关闭的设置注册表
		2.打开注册表：
			Window键 + R键	输入regedit	-------- 打开注册表编辑器


	配置文件不会跟着应用程序跑		因为是操作系统的，所以我们需要设置应用程序的配置文件
		改函数




*/



#include "pch.h"
#include "framework.h"
#include "CWindApp类.h"
#include "CWindApp类Dlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CCWindApp类App

BEGIN_MESSAGE_MAP(CCWindApp类App, CWinApp)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// CCWindApp类App 构造

CCWindApp类App::CCWindApp类App()
{
	// 支持重新启动管理器
	m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;

	// TODO: 在此处添加构造代码，
	// 将所有重要的初始化放置在 InitInstance 中
}


// 唯一的 CCWindApp类App 对象

CCWindApp类App theApp;


// CCWindApp类App 初始化

BOOL CCWindApp类App::InitInstance()
{
	/*
	//修改下工程的文件名字：
	theApp.m_pszAppName = L"开心的紫色大西瓜";
	//修改完后，重新生成该项目 就可以在该项目的文件所在位置的debug中点击运行CWind类应用程序，就可以看	AfxMessageBox	所带的工程文件名已经改变；
		//我不去自己设置	就是默认的

	*/
	 


	// 如果一个运行在 Windows XP 上的应用程序清单指定要
	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式，
	//则需要 InitCommonControlsEx()。  否则，将无法创建窗口。
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 将它设置为包括所有要在应用程序中使用的
	// 公共控件类。
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();


	AfxEnableControlContainer();

	// 创建 shell 管理器，以防对话框包含
	// 任何 shell 树视图控件或 shell 列表视图控件。
	CShellManager *pShellManager = new CShellManager;

	// 激活“Windows Native”视觉管理器，以便在 MFC 控件中启用主题
	CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

	// 标准初始化
	// 如果未使用这些功能并希望减小
	// 最终可执行文件的大小，则应移除下列
	// 不需要的特定初始化例程
	// 更改用于存储设置的注册表项
	// TODO: 应适当修改该字符串，
	// 例如修改为公司或组织名














	/*项目运行后 在配置文件的默认位置搜不到该工程名的有两个原因，其一（1）就是如果有SetRegistryKey这个函数 就不会去写配置文件，它会写到注册表里面去*/
	/*	如果有设置注册表键值，不会生成配置文件	*/
	//SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

	/*	第二个原因（2）是该项目程序需要		以管理员身份运行才可以		因为操作c盘需要管理员身份	权限问题*/




	/*	注意关闭注册表用配置文件实现记忆上次设置是一种方式			也可以用注册表的方式实现这个功能的！！！！！！！*/
	//实现如下：							但是使用注册表还需要是配置文件的读和些操作；	注册表是在配置文件的方式上叠加的
#if Configuration_file
	SetRegistryKey(_T("大母牛的CWindApp类"/*设置注册表里面的名字		这个名字能改啊*/));
		//如果调用了SetRegistryKey函数		就会在关闭的设置注册表

	/*
	那么怎么去查看注册表：
		Window键 + R键	输入regedit	--------	打开注册表编辑器
	
	*/

	/*	当你设置完以上的东西	第一次以管理员身份运行程序		你就会发现对话框窗口小的不能再小了	那就说明读取注册表成功了	然后你再任意设置大小	关闭再运行	实现得了了
	然后你再去看注册表就能看到我写的大母牛了
			生成的注册表位置是		计算机\HKEY_CURRENT_USER\Software\	里面了	都是在目录的下部分		*/
#endif



	CCWindApp类Dlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此放置处理何时用
		//  “确定”来关闭对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用
		//  “取消”来关闭对话框的代码
	}
	else if (nResponse == -1)
	{
		TRACE(traceAppMsg, 0, "警告: 对话框创建失败，应用程序将意外终止。\n");
		TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件，则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
	}

	// 删除上面创建的 shell 管理器。
	if (pShellManager != nullptr)
	{
		delete pShellManager;
	}

#if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS)
	ControlBarCleanUp();
#endif

	// 由于对话框已关闭，所以将返回 FALSE 以便退出应用程序，
	//  而不是启动应用程序的消息泵。
	return FALSE;
}

